package com.jiyun.controller;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jiyun.common.result.Result;
import com.jiyun.model.pojo.Coupon;
import com.jiyun.model.query.CouponQuery;
import com.jiyun.service.CouponService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author author
 * @since 2025-01-17
 */
@RestController
@RequestMapping("admin/coupon")
public class CouponController {

    @Autowired
    private CouponService couponService;

    /**
     * 接口：添加
     * @param coupon 要添加的
     * @return Result 响应给前端
     */
    @PostMapping
    @ApiOperation("添加" )
    public Result save(@RequestBody Coupon coupon) {
        couponService.save(coupon);
        return Result.ok();
    }

    /**
     * 接口：根据Id删除
     * @param id 的Id
     * @return Result 响应给前端
     */
    @DeleteMapping("/remove/{id}")
    @ApiOperation("根据Id删除")
    public Result remove(@PathVariable("id" ) Long id) {
        couponService.removeById(id);
        return Result.ok();
    }

    /**
     * 接口：修改
     * @param coupon 要修改的数据
     * @return Result 响应给前端
     */
    @PutMapping("update")
    @ApiOperation("修改")
    public Result updateById(@RequestBody Coupon coupon) {
        couponService.updateById(coupon);
        return Result.ok();
    }


    /**
     * 根据Id查询单个
     */
    @GetMapping("/get/{id}")
    @ApiOperation("根据Id查询单个")
    public Result getById(@PathVariable Long id)  {
        Coupon one = couponService.getById(id);
        return Result.ok(one);
    }

    /**
     * 接口：查询所有
     */
    @GetMapping
    @ApiOperation("查询所有")
    public Result getList() {
        List<Coupon> listAll = couponService.list();
        return Result.ok(listAll);
    }


    /**
     * 接口：分页查询所有
     * @return List<Coupon> 所有数据
     */
    @GetMapping("/{page}/{limit}")
    @ApiOperation("获取所有")
    public Result getPageList(@PathVariable Integer page, @PathVariable Integer limit, CouponQuery query) {
        //封装分页参数
        query.setCurrentPage(page);
        query.setPageSize(limit);
        //查询分页数据
        IPage<Coupon> pageList = couponService.getPageList(query);
        return Result.ok(pageList);
    }

    /**
     * 处理POST请求以获取优惠券信息
     * 该方法特别适用于根据用户ID和优惠券状态获取优惠券列表
     *
     * @param id 用户ID，用于指定哪个用户的优惠券信息要获取
     * @param status 优惠券状态，用于过滤用户拥有的特定状态的优惠券
     * @return 返回一个Result对象，其中包含根据给定条件查询到的优惠券列表
     */
    @PostMapping("/{id}/{status}")
    @ApiOperation("获取所有")
    public Result getCoupon(@PathVariable("id") Long id,@PathVariable("status") Integer status) {
        //将用户传回来的id拿到后端
        List<Coupon> list = couponService.getCoupon(id,status);
        return Result.ok(list);
    }
}
